package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.File;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public interface FileService {

    /**
     * 文件重命名
     * @param
     * @return
     */
    AjaxResult renameFile(Long fileId, String fileName, String label);

    /**
     * 根据ID查询文件信息
     * @param id 文件ID
     * @return
     */
    File selectFileById(Long id);

    // 可以在这里添加业务层方法，例如查询文件信息
    File findByFileName(String fileName);

    List<TreeSelect> selectFileTreeList();

    public List<TreeSelect> selectAllFileTreeList();

    List<File> selectList(File file);

    /**
     * 上传文件
     * @param file 文件对象
     * @throws IOException 如果文件上传过程中发生错误
     */
    void uploadFile(MultipartFile[] file,Long parentId,Integer security, String datasetId) throws IOException;

    /**
     * 下载文件
     * @param id 文件ID
     * @return 文件输入流
     * @throws IOException 如果文件下载过程中发生错误
     */
    InputStream downloadFile(Long id) throws IOException;

    void createFolder(File file);

    void deleteFileOrFolder(Long id);

    List selectChildrenFileList(Long id);

    /**
     * 权限校验机制
     * 先校验密级再校验权限
     */
    boolean checkPremission(Long fileId, Integer auth);

    void saveChange(String downUrl, String changeUrl, String fileId, String userId, String lastsave) throws IOException;
}